AE - 01.空间书签的创建及调用

流程图

引用类库及接口描述
  • 引用类库:
using ESRI.ArcGIS.Carto;
  • 接口:
1. IMapBookmarks接口:Bookmarks属性可以得到地图文档中已经存在的所有书签对象,通过该接口的AddBookmark和RemoveBookmark方法可以对书签进行添加和删除。
2. ISpatialBookmark接口:定义所有空间书签的共同功能,特别是书签的Name属性和ZoomTo方法。Name属性定义了书签的名字,通过ZoomTo方法可跳转到书签位置点。
3. IAOIBookmark接口:继承自ISpatialBookmark接口,新增了Location属性,存储地图中感兴趣范围。
步骤

步骤1: 添加控件

步骤2: 给控件添加事件,设置删除Button的可见性

步骤3: 封装功能

步骤4: 运行实现

代码

七、代码

  1. 创建书签

    /// <summary>
    /// 创建书签
    /// </summary>
    public Boolean CreatBookmark(string sBookmarkName)
    {
        Console.WriteLine(sBookmarkName);
        IAOIBookmark aoiBookmark = new AOIBookmark();
        if (aoiBookmark != null)
        {
            aoiBookmark.Location = mapControl.ActiveView.Extent;
            aoiBookmark.Name = sBookmarkName;
        }
    
        IMapBookmarks bookmarks = mapControl.Map as IMapBookmarks;
        if (bookmarks != null)
        {
            bookmarks.AddBookmark(aoiBookmark);
            cmb_Bookmark.Items.Add(aoiBookmark.Name);
            return true;
        }
        return false;
       }
  2. 监听结束书签列表

    /// <summary>
    /// 监听结束书签列表
    /// </summary>
    public Boolean oneBookmark(string name)
    {
        IMapBookmarks bookmarks = mapControl.Map as IMapBookmarks;
        IEnumSpatialBookmark enumSpatialBookmark = bookmarks.Bookmarks;
    
        enumSpatialBookmark.Reset();
        ISpatialBookmark spatialBookmark = enumSpatialBookmark.Next();
        while (spatialBookmark != null)
        {
            if (name == spatialBookmark.Name)
            {
                return false;
            }
    
            spatialBookmark = enumSpatialBookmark.Next();
        }
        return true;
      }
  3. 选中书签列表item

    private void cmb_Bookmark_SelectedIndexChanged(object sender, EventArgs e)
    {

    IMapBookmarks bookmarks = mapControl.Map as IMapBookmarks;
    IEnumSpatialBookmark enumSpatialBookmark = bookmarks.Bookmarks;
    
    enumSpatialBookmark.Reset();
    ISpatialBookmark spatialBookmark = enumSpatialBookmark.Next();
    while (spatialBookmark != null)
    {
        string index = cmb_Bookmark.SelectedIndex.ToString();
        string bm_name = cmb_Bookmark.Items[Convert.ToInt32(index)].ToString();
        //Console.WriteLine(bm_name + " "+ spatialBookmark.Name);
    
        if (bm_name == spatialBookmark.Name)
        {
            spatialBookmark.ZoomTo((IMap)mapControl.ActiveView);
            mapControl.ActiveView.Refresh();
            break;
        }
    
        spatialBookmark = enumSpatialBookmark.Next();
    }
    
    btn_bmDEL.Visible = true;
    but_addbm.Visible = false;

    }

  4. 添加书签

    private void but_addbm_Click(object sender, EventArgs e)
    {
            addBookmark add = new addBookmark(this);
            add.Show();
      }
  5. 删除书签

    private void btn_bmDEL_Click(object sender, EventArgs e)
    {
            cmb_Bookmark.Items.Remove(cmb_Bookmark.SelectedItem);
            cmb_Bookmark.Text = "";
            if (cmb_Bookmark.Items.Count == 0)
                cmb_Bookmark.Text = "无书签";
            btn_bmDEL.Visible = false;
            but_addbm.Visible = true;
       }